package com.hxx.day8a;

import com.hxx.day8a.domain.Book;
import org.junit.Test;

/**
 * 反射类型：反射获取类型
 */
public class TestDemo {
    //第一种
    @Test
    public void testReflectType() throws Exception {
        // 反射获取类型
        Class<?> aClass = Class.forName("com.hxx.day8a.domain.Book");
        //创建对象
        Object o = aClass.newInstance();
        System.out.println(o);
        //调用方法
        Book book = (Book) o;
        book.setName("三国演义");
        book.setAuthor("罗贯中");
        System.out.println(book);
    }
    //第二种
    @Test
    public void testReflectType2() throws Exception {
        // 反射获取类型
        Class<?> aClass = Book.class;
        //创建对象
        Object o = aClass.newInstance();
        System.out.println(o);
        //调用方法
        Book book = (Book) o;
        book.setName("三国演义");
        book.setAuthor("罗贯中");
        System.out.println(book);
    }
    /**
     * 第三种：通过对象获取类型
     */
    @Test
    public void testReflectType3() throws Exception {
        // 反射获取类型
        Book book = new Book();
        Class<?> aClass = book.getClass();
    }

    /**
     * 第四种：通过类加载器获取类型
     */
    @Test
    public void testReflectType4() throws Exception {
        // 反射获取类型
        Class<?> aClass = ClassLoader.getSystemClassLoader()
                .loadClass("com.hxx.day8a.domain.Book");
        //创建对象
        Object o = aClass.newInstance();
        System.out.println(o);
        //调用方法
        Book book = (Book) o;
        book.setName("三国演义");
        book.setAuthor("罗贯中");
        System.out.println(book);
    }
}































